/*
 * File:   MemoryManagement.h
 * Author: amalavassi
 *
 * Created on 11 de mayo de 2010, 05:31 PM
 */

#ifndef _MEMORYMANAGEMENT_H
#define	_MEMORYMANAGEMENT_H
#ifdef	__cplusplus
extern "C" {
#endif
#ifdef	__cplusplus
}
#endif
#endif	/* _MEMORYMANAGEMENT_H */

#include <elf.h>
#include <err.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/param.h>

//file descriptor del guest
int guest_fd;

//Puntero al inicio de memoria
void *       guest_memory_base;

//maximo de memoria
unsigned long guest_max_memory;

//uso actual de memoria
unsigned long guest_current_limit;

//convierte a una dirección lógica
void *        to_guest_logical_adress(unsigned long address);

//convierte a una direccion física
unsigned long to_physical_adress(const void *address);

//Obtiene una cantidad de paginas de memoria
void          *get_pages(unsigned int num);

//Obtiene paginas en blanco de memoria
void          *map_zeroed_pages(unsigned int num);

//Mapea un ejecutable a memoria
void          map_at(int fd, void *addr, unsigned long offset, unsigned long len);

//Mapeamos un ejecutable de Tipo ELF a memoria
unsigned long mapear_elf(int elf_fd, const Elf32_Ehdr *ehdr);

//Carga una imagen BZ para que se ejecue automaticamente
unsigned long cargar_bzimage(int fd);

//Se encarga de cargar el kernel
unsigned long load_kernel(int fd);

//Alineacion de paginas
inline unsigned long page_align(unsigned long addr);

//Carga de disco de Memoria RAm de inicoio de kernel
unsigned long load_initrd(const char *name, unsigned long mem);


